package com.sgcc.ln.pmos.common.view;

import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

import androidx.core.content.ContextCompat;

import com.blankj.utilcode.util.TimeUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import com.lxj.xpopup.XPopup;
import com.lxj.xpopup.interfaces.OnSelectListener;
import com.sgcc.pmos.nativesdk.R;
import com.sgcc.ln.pmos.common.bean.ConfigInfoBean;
import com.sgcc.ln.pmos.common.bean.GoodScreenBackBean;
import com.sgcc.ln.pmos.common.http.HttpInterConst;
import com.sgcc.ln.pmos.common.http.HttpRequestUtils;
import com.sgcc.ln.pmos.common.http.MvcNetCallback;
import com.zhy.http.okhttp.callback.Callback;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import okhttp3.Call;
import okhttp3.Response;

/**
 * @author ChaoAJ
 * @describe 套餐选择
 * @time 2022/8/29 14:10
 */
public class SetMealView extends LinearLayout implements View.OnClickListener {
    private TextView tvTitleText;//title
    private TextView tvTimeIntervalUnlimited; // 是否分时段 不限
    private TextView tvTimeIntervalYes;// 是否分时段 是
    private TextView tvTimeIntervalNo;// 是否分时段 否
    private TextView tvAgreedPowerUnlimited; // 是否约定电量 不限
    private TextView tvAgreedPowerYes; // 是否约定电量 是
    private TextView tvAgreedPowerNo; // 是否约定电量 否
    private TextView tvDeviationRangeTitle;// 偏差范围 title
    private LinearLayout llDeviationRangeLayout; // 偏差范围 Layout
    private EditText etDeviationRangeStart;// 偏差范围 开始
    private EditText etDeviationRangeEnd;// 偏差范围 结束
    private TextView tvFixedPriceTitle;// 是否固定价格 title
    private LinearLayout llFixedPriceLayout;// 是否固定价格 Layout
    private TextView tvFixedPriceUnlimited;//是否固定价格 不限
    private TextView tvFixedPriceYes;//是否固定价格 是
    private TextView tvFixedPriceNo;//是否固定价格 否
    private TextView tvFixedPriceRangeTitle; //固定价格范围 title
    private LinearLayout llFixedPriceRangeLayout;  //固定价格范围 layout
    private EditText tvFixedPriceRangeStart;//固定价格范围 开始
    private EditText tvFixedPriceRangeEnd;//固定价格范围 结束
    private TextView tvMarketTitle;//市场联动费用类型 title
    private RelativeLayout rlMarketLayout; //市场联动费用类型 layout
    private TextView tvMarketText;//市场联动费用类型 text
    private TextView tvPriceDifferenceTitle;// 是否包含约定价差 title
    private LinearLayout llPriceDifferenceLayout;// 是否包含约定价差 layout
    private TextView tvPriceDifferenceUnlimited;// 是否包含约定价差 不限
    private TextView tvPriceDifferenceYes;// 是否包含约定价差 是
    private TextView tvPriceDifferenceNo;// 是否包含约定价差 否
    private TextView tvPriceDifferenceRangeTitle; // 约定价差范围 title
    private LinearLayout llPriceDifferenceRangeLayout; // 约定价差范围 layout
    private EditText etPriceDifferenceRangeStart; // 约定价差范围 开始
    private EditText etPriceDifferenceRangeEnd; // 约定价差范围 结束

    private String title;

    private GoodScreenBackBean.SchemeCombVo schemeCombVo;


    public SetMealView(Context context, String title, GoodScreenBackBean.SchemeCombVo schemeCombVo) {
        super(context);
        this.title = title;
        this.schemeCombVo = schemeCombVo;
        initLineChart();

    }


    private void initLineChart() {
        View view = LayoutInflater.from(getContext()).inflate(R.layout.view_set_meal_layout, this);

        tvTitleText = view.findViewById(R.id.tvTitleText);
        tvTimeIntervalUnlimited = view.findViewById(R.id.tvTimeIntervalUnlimited);
        tvTimeIntervalYes = view.findViewById(R.id.tvTimeIntervalYes);
        tvTimeIntervalNo = view.findViewById(R.id.tvTimeIntervalNo);
        tvAgreedPowerUnlimited = view.findViewById(R.id.tvAgreedPowerUnlimited);
        tvAgreedPowerYes = view.findViewById(R.id.tvAgreedPowerYes);
        tvAgreedPowerNo = view.findViewById(R.id.tvAgreedPowerNo);
        tvDeviationRangeTitle = view.findViewById(R.id.tvDeviationRangeTitle);
        llDeviationRangeLayout = view.findViewById(R.id.llDeviationRangeLayout);
        etDeviationRangeStart = view.findViewById(R.id.etDeviationRangeStart);
        etDeviationRangeEnd = view.findViewById(R.id.etDeviationRangeEnd);
        tvFixedPriceTitle = view.findViewById(R.id.tvFixedPriceTitle);
        llFixedPriceLayout = view.findViewById(R.id.llFixedPriceLayout);
        tvFixedPriceUnlimited = view.findViewById(R.id.tvFixedPriceUnlimited);
        tvFixedPriceYes = view.findViewById(R.id.tvFixedPriceYes);
        tvFixedPriceNo = view.findViewById(R.id.tvFixedPriceNo);
        tvFixedPriceRangeTitle = view.findViewById(R.id.tvFixedPriceRangeTitle);
        llFixedPriceRangeLayout = view.findViewById(R.id.llFixedPriceRangeLayout);
        tvFixedPriceRangeStart = view.findViewById(R.id.tvFixedPriceRangeStart);
        tvFixedPriceRangeEnd = view.findViewById(R.id.tvFixedPriceRangeEnd);
        tvMarketTitle = view.findViewById(R.id.tvMarketTitle);
        rlMarketLayout = view.findViewById(R.id.rlMarketLayout);
        tvMarketText = view.findViewById(R.id.tvMarketText);
        tvPriceDifferenceTitle = view.findViewById(R.id.tvPriceDifferenceTitle);
        llPriceDifferenceLayout = view.findViewById(R.id.llPriceDifferenceLayout);
        tvPriceDifferenceUnlimited = view.findViewById(R.id.tvPriceDifferenceUnlimited);
        tvPriceDifferenceYes = view.findViewById(R.id.tvPriceDifferenceYes);
        tvPriceDifferenceNo = view.findViewById(R.id.tvPriceDifferenceNo);
        tvPriceDifferenceRangeTitle = view.findViewById(R.id.tvPriceDifferenceRangeTitle);
        llPriceDifferenceRangeLayout = view.findViewById(R.id.llPriceDifferenceRangeLayout);
        etPriceDifferenceRangeStart = view.findViewById(R.id.etPriceDifferenceRangeStart);
        etPriceDifferenceRangeEnd = view.findViewById(R.id.etPriceDifferenceRangeEnd);

        tvTimeIntervalUnlimited.setOnClickListener(this); // 是否分时段 不限
        tvTimeIntervalYes.setOnClickListener(this);// 是否分时段 是
        tvTimeIntervalNo.setOnClickListener(this);// 是否分时段 否

        tvAgreedPowerUnlimited.setOnClickListener(this); // 是否约定电量 不限
        tvAgreedPowerYes.setOnClickListener(this); // 是否约定电量 是
        tvAgreedPowerNo.setOnClickListener(this); // 是否约定电量 否

        tvFixedPriceUnlimited.setOnClickListener(this); // 是否固定价格 不限
        tvFixedPriceYes.setOnClickListener(this);//是否固定价格 是
        tvFixedPriceNo.setOnClickListener(this);//是否固定价格 否

        tvPriceDifferenceUnlimited.setOnClickListener(this);// 是否包含约定价差 不限
        tvPriceDifferenceYes.setOnClickListener(this);// 是否包含约定价差 是
        tvPriceDifferenceNo.setOnClickListener(this);// 是否包含约定价差 否

        rlMarketLayout.setOnClickListener(this); //市场联动费用类型
        tvTitleText.setText(title);
        reset();
    }


    public void reset() {
        tvTimeIntervalUnlimited.setSelected(true); // 是否分时段 不限
        tvTimeIntervalYes.setSelected(false);// 是否分时段 是
        tvTimeIntervalNo.setSelected(false);// 是否分时段 否


        tvAgreedPowerUnlimited.setSelected(true); // 是否约定电量 不限
        tvAgreedPowerYes.setSelected(false); // 是否约定电量 是
        tvAgreedPowerNo.setSelected(false); // 是否约定电量 否


        tvDeviationRangeTitle.setVisibility(GONE);// 偏差范围 title
        llDeviationRangeLayout.setVisibility(GONE); // 偏差范围 Layout

        tvFixedPriceTitle.setVisibility(VISIBLE);// 是否固定价格 title
        llFixedPriceLayout.setVisibility(VISIBLE);// 是否固定价格 Layout

        tvFixedPriceRangeTitle.setVisibility(GONE); //固定价格范围 title
        llFixedPriceRangeLayout.setVisibility(GONE);  //固定价格范围 layout

        tvMarketTitle.setVisibility(GONE);//市场联动费用类型 title
        rlMarketLayout.setVisibility(GONE); //市场联动费用类型 layout

        tvPriceDifferenceTitle.setVisibility(VISIBLE);// 是否包含约定价差 title
        llPriceDifferenceLayout.setVisibility(VISIBLE);// 是否包含约定价差 layout

        tvFixedPriceUnlimited.setSelected(true); // 是否固定价格 不限
        tvFixedPriceYes.setSelected(false);//是否固定价格 是
        tvFixedPriceNo.setSelected(false);//是否固定价格 否

        tvPriceDifferenceUnlimited.setSelected(true);// 是否包含约定价差 不限
        tvPriceDifferenceYes.setSelected(false);// 是否包含约定价差 是
        tvPriceDifferenceNo.setSelected(false);// 是否包含约定价差 否


        tvPriceDifferenceRangeTitle.setVisibility(GONE); // 约定价差范围 title
        llPriceDifferenceRangeLayout.setVisibility(GONE); // 约定价差范围 layout

        schemeCombVo.setSubsectionNum("");
        schemeCombVo.setEnergyType("");
        schemeCombVo.setIsFixPrice("");
        schemeCombVo.setIsFixPriceDiff("");

    }


    @Override
    public void onClick(View view) {

        int id = view.getId();

        if (id == R.id.tvTimeIntervalUnlimited) { // 是否分时段 不限

            tvTimeIntervalUnlimited.setSelected(true); // 是否分时段 不限
            tvTimeIntervalYes.setSelected(false);// 是否分时段 是
            tvTimeIntervalNo.setSelected(false);// 是否分时段 否
            schemeCombVo.setSubsectionNum("");
        } else if (id == R.id.tvTimeIntervalYes) {// 是否分时段 是
            schemeCombVo.setSubsectionNum("2");
            tvTimeIntervalUnlimited.setSelected(false); // 是否分时段 不限
            tvTimeIntervalYes.setSelected(true);// 是否分时段 是
            tvTimeIntervalNo.setSelected(false);// 是否分时段 否

        } else if (id == R.id.tvTimeIntervalNo) {//是否分时段 否
            schemeCombVo.setSubsectionNum("1");
            tvTimeIntervalUnlimited.setSelected(false); // 是否分时段 不限
            tvTimeIntervalYes.setSelected(false);// 是否分时段 是
            tvTimeIntervalNo.setSelected(true);// 是否分时段 否

        } else if (id == R.id.tvAgreedPowerUnlimited) {// 是否约定电量 不限
            schemeCombVo.setEnergyType("");
            tvAgreedPowerUnlimited.setSelected(true); // 是否约定电量 不限
            tvAgreedPowerYes.setSelected(false); // 是否约定电量 是
            tvAgreedPowerNo.setSelected(false); // 是否约定电量 否

            tvDeviationRangeTitle.setVisibility(GONE);// 偏差范围 title
            llDeviationRangeLayout.setVisibility(GONE); // 偏差范围 Layout


        } else if (id == R.id.tvAgreedPowerYes) {// 是否约定电量 是
            schemeCombVo.setEnergyType("1");
            tvAgreedPowerUnlimited.setSelected(false); // 是否约定电量 不限
            tvAgreedPowerYes.setSelected(true); // 是否约定电量 是
            tvAgreedPowerNo.setSelected(false); // 是否约定电量 否


            tvDeviationRangeTitle.setVisibility(VISIBLE);// 偏差范围 title
            llDeviationRangeLayout.setVisibility(VISIBLE); // 偏差范围 Layout


        } else if (id == R.id.tvAgreedPowerNo) {// 是否约定电量 否
            schemeCombVo.setEnergyType("2");

            tvAgreedPowerUnlimited.setSelected(false); // 是否约定电量 不限
            tvAgreedPowerYes.setSelected(false); // 是否约定电量 是
            tvAgreedPowerNo.setSelected(true); // 是否约定电量 否


            tvDeviationRangeTitle.setVisibility(GONE);// 偏差范围 title
            llDeviationRangeLayout.setVisibility(GONE); // 偏差范围 Layout


        } else if (id == R.id.tvFixedPriceUnlimited) {//  是否固定价格 不限
            schemeCombVo.setIsFixPrice("");

            tvFixedPriceUnlimited.setSelected(true); // 是否固定价格 不限
            tvFixedPriceYes.setSelected(false);//是否固定价格 是
            tvFixedPriceNo.setSelected(false);//是否固定价格 否

            schemeCombVo.setMarketFeeType(null);
            tvMarketText.setText("请选择");
            tvFixedPriceRangeTitle.setVisibility(GONE); //固定价格范围 title
            llFixedPriceRangeLayout.setVisibility(GONE);  //固定价格范围 layout
            tvMarketTitle.setVisibility(GONE);//市场联动费用类型 title
            rlMarketLayout.setVisibility(GONE); //市场联动费用类型 layout


        } else if (id == R.id.tvFixedPriceYes) {// 是否固定价格 是
            schemeCombVo.setIsFixPrice("1");
            tvFixedPriceUnlimited.setSelected(false); // 是否固定价格 不限
            tvFixedPriceYes.setSelected(true);//是否固定价格 是
            tvFixedPriceNo.setSelected(false);//是否固定价格 否
            schemeCombVo.setMarketFeeType(null);
            tvMarketText.setText("请选择");
            tvFixedPriceRangeTitle.setVisibility(VISIBLE); //固定价格范围 title
            llFixedPriceRangeLayout.setVisibility(VISIBLE);  //固定价格范围 layout
            tvMarketTitle.setVisibility(GONE);//市场联动费用类型 title
            rlMarketLayout.setVisibility(GONE); //市场联动费用类型 layout


        } else if (id == R.id.tvFixedPriceNo) {//  是否固定价格 否
            schemeCombVo.setIsFixPrice("2");
            tvFixedPriceUnlimited.setSelected(false); // 是否固定价格 不限
            tvFixedPriceYes.setSelected(false);//是否固定价格 是
            tvFixedPriceNo.setSelected(true);//是否固定价格 否
            schemeCombVo.setMarketFeeType(null);
            tvMarketText.setText("请选择");
            tvFixedPriceRangeTitle.setVisibility(GONE); //固定价格范围 title
            llFixedPriceRangeLayout.setVisibility(GONE);  //固定价格范围 layout
            tvMarketTitle.setVisibility(VISIBLE);//市场联动费用类型 title
            rlMarketLayout.setVisibility(VISIBLE); //市场联动费用类型 layout


        } else if (id == R.id.tvPriceDifferenceUnlimited) {//  是否包含约定价差 不限
            schemeCombVo.setIsFixPriceDiff("");
            tvPriceDifferenceUnlimited.setSelected(true);// 是否包含约定价差 不限
            tvPriceDifferenceYes.setSelected(false);// 是否包含约定价差 是
            tvPriceDifferenceNo.setSelected(false);// 是否包含约定价差 否


            tvPriceDifferenceRangeTitle.setVisibility(GONE); // 约定价差范围 title
            llPriceDifferenceRangeLayout.setVisibility(GONE); // 约定价差范围 layout


        } else if (id == R.id.tvPriceDifferenceYes) {//  是否包含约定价差 是
            schemeCombVo.setIsFixPriceDiff("1");
            tvPriceDifferenceUnlimited.setSelected(false);// 是否包含约定价差 不限
            tvPriceDifferenceYes.setSelected(true);// 是否包含约定价差 是
            tvPriceDifferenceNo.setSelected(false);// 是否包含约定价差 否

            tvPriceDifferenceRangeTitle.setVisibility(VISIBLE); // 约定价差范围 title
            llPriceDifferenceRangeLayout.setVisibility(VISIBLE); // 约定价差范围 layout

        } else if (id == R.id.tvPriceDifferenceNo) {//  是否包含约定价差 否
            schemeCombVo.setIsFixPriceDiff("2");
            tvPriceDifferenceUnlimited.setSelected(false);// 是否包含约定价差 不限
            tvPriceDifferenceYes.setSelected(false);// 是否包含约定价差 是
            tvPriceDifferenceNo.setSelected(true);// 是否包含约定价差 否

            tvPriceDifferenceRangeTitle.setVisibility(GONE); // 约定价差范围 title
            llPriceDifferenceRangeLayout.setVisibility(GONE); // 约定价差范围 layout

        } else if (id == R.id.rlMarketLayout) {//市场联动费用类型
                getData(view);

        }


    }


    private void getData(View view) {
        Map<String, Object> params = new HashMap<>();
        params.put("subsectionNum",  schemeCombVo.getSubsectionNum());
        HttpRequestUtils.getInstance().request(params, HttpInterConst.GET_CONFIG_INFO, new MvcNetCallback<ConfigInfoBean>() {
            @Override
            public void onResponse(ConfigInfoBean response, int id) {
                super.onResponse(response, id);
                List<ConfigInfoBean.ConfigInfoData> configInfoData = response.getData();
                if (null != configInfoData && configInfoData.size() > 0) {
                    ConfigInfoBean.ConfigInfoData data = configInfoData.get(0);
                    tvMarketText.setText(data.getItemName());
                    schemeCombVo.setMarketFeeType(data.getConfigId());
                    showAttachPopup(view, configInfoData);
                }else {
                    ToastUtils.showShort("暂无数据");
                }

            }
        });

    }




    private void showAttachPopup(View view, List<ConfigInfoBean.ConfigInfoData> data) {
        if (null == data || data.size() == 0) {
            return;
        }
        String[] strings = new String[data.size()];
        for (int i = 0; i < data.size(); i++) {
            strings[i] = data.get(i).getItemName();
        }
        new XPopup.Builder(getContext())
                .hasShadowBg(false)
                .atView(view)  // 依附于所点击的View，内部会自动判断在上方或者下方显示
                .asAttachList(strings,
                        null,
                        (position, text) -> {
                            tvMarketText.setText(text);
                            schemeCombVo.setMarketFeeType(data.get(position).getConfigId());
                        }, 0, 0, Gravity.LEFT).show();
        ;
    }


    //获取单一套餐
    public GoodScreenBackBean.SchemeCombVo getData() {
        String energyType = schemeCombVo.getEnergyType();
        if (!TextUtils.isEmpty(energyType)) {//是否约定电量 1是 2否
            if (energyType.equals("1")) {//是
                String plRange = etDeviationRangeStart.getText().toString().trim();//偏差范围开始
//                if (TextUtils.isEmpty(plRange)) {
//                    ToastUtils.showShort(String.format("请输入%s偏差范围开始值", title));
//                    return null;
//                }
                schemeCombVo.setPlRange(plRange);

                String ndRange = etDeviationRangeEnd.getText().toString().trim();//偏差范围结束
//                if (TextUtils.isEmpty(ndRange)) {
//                    ToastUtils.showShort(String.format("请输入%s偏差范围结束值", title));
//                    return null;
//                }
                schemeCombVo.setNdRange(ndRange);
            }

            String isFixPrice = schemeCombVo.getIsFixPrice();

            if (!TextUtils.isEmpty(isFixPrice)) {//是否固定价格 1 是 2 否

                if (isFixPrice.equals("1")) {//是
                    String eItemValueStart = tvFixedPriceRangeStart.getText().toString().trim();//固定价格范围开始
//                    if (TextUtils.isEmpty(eItemValueStart)) {
//                        ToastUtils.showShort(String.format("请输入%s固定价格范围开始值", title));
//                        return null;
//                    }
                    schemeCombVo.seteItemValueStart(eItemValueStart);

                    String eItemValueEnd = tvFixedPriceRangeEnd.getText().toString().trim();//固定价格范围结束
//                    if (TextUtils.isEmpty(eItemValueEnd)) {
//                        ToastUtils.showShort(String.format("请输入%s固定价格范围结束值", title));
//                        return null;
//                    }
                    schemeCombVo.seteItemValueEnd(eItemValueEnd);

                } else if (isFixPrice.equals("2")) {//否
//                    if (TextUtils.isEmpty(schemeCombVo.getMarketFeeType())) {
//                        ToastUtils.showShort("请选择市场联动费用类型");
//                        return null;
//                    }
                }
            }

            String isFixPriceDiff = schemeCombVo.getIsFixPriceDiff();

            if (!TextUtils.isEmpty(isFixPriceDiff)) {//是否约定价差 1 是 2 否

                if (isFixPriceDiff.equals("1")) {//是
                    String eConfigValueStart = etPriceDifferenceRangeStart.getText().toString().trim();//约定价差范围开始值
//                    if (TextUtils.isEmpty(eConfigValueStart)) {
//                        ToastUtils.showShort(String.format("请输入%s约定价差范围开始值", title));
//                        return null;
//                    }
                    schemeCombVo.seteConfigValueStart(eConfigValueStart);

                    String eConfigValueEnd = etPriceDifferenceRangeEnd.getText().toString().trim();//约定价差范围结束值
//                    if (TextUtils.isEmpty(eConfigValueEnd)) {
//                        ToastUtils.showShort(String.format("请输入%s约定价差范围结束值", title));
//                        return null;
//                    }
                    schemeCombVo.seteConfigValueEnd(eConfigValueEnd);

                }
            }

        }
        return schemeCombVo;
    }


}